/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.inteligencia.stage.web.eventos;

import com.inteligencia.stage.business.dto.EventoDTO;
import com.inteligencia.stage.business.dto.PerfilEventoPersonaDTO;
import com.inteligencia.stage.business.dto.PersonaDTO;
import com.inteligencia.stage.business.dto.TareaDTO;
import com.inteligencia.stage.dataaccess.domain.EventoDAO;
import com.inteligencia.stage.dataaccess.domain.PerfilDAO;
import com.inteligencia.stage.dataaccess.domain.PerfilEventoPersonaDAO;
import com.inteligencia.stage.dataaccess.model.TperfilEventoPersonaVO;
import com.inteligencia.stage.dataaccess.model.TperfilVO;
import com.inteligencia.stage.dataaccess.model.TtarPerfVO;
import com.inteligencia.stage.dataaccess.model.TtareaVO;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import com.opensymphony.xwork2.ActionSupport;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 *
 * @author igorov
 */
@ParentPackage(value = "stage")
public class Gestor extends ActionSupport{
    private static final long serialVersionUID = 7968544374444173511L;
    private static final Log log = LogFactory.getLog(ListarEventos.class);
    private String theme = "showcase";
    private HttpSession session;
    private ApplicationContext ctx;
    private EventoDAO eventoDAO;
    private PerfilDAO perfilDAO;
    private PerfilEventoPersonaDAO perfilEventoPersonaDAO;
    private String evento;
    
    @Action(value = "/seleccionarEvento", results = {
        @Result(location = "usuario/eventos.jsp", name = "error"),
        @Result(location = "usuario/bienvenido.jsp", name = "success")
    })
    public String execute() {
        try {
            if (evento.compareTo("-1") == 0) {
                return ERROR;
            }
            
            //Conviertiendo el codigo del evento seleccionado
            //siempre y cuando no sea negativo no cadena vacia
            Integer idEvento = Integer.parseInt(evento);
//            System.out.println("Evento elegido" + idEvento);
            ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");
            session = ServletActionContext.getRequest().getSession();

            eventoDAO = (EventoDAO) ctx.getBean("eventoDAO");
            perfilEventoPersonaDAO = (PerfilEventoPersonaDAO) ctx.getBean("perfilEventoPersonaDAO");
            perfilDAO = (PerfilDAO) ctx.getBean("perfilDAO");
            
            //Obteniendo un EventoDTO a partir de su codigo de evento
            EventoDTO eventoDTO = new EventoDTO(eventoDAO.get(idEvento));
            
            //Obteniendo la PersonaDTO que esta en sesion
            PersonaDTO personaDTO = (PersonaDTO) session.getAttribute("usuario");
            
            //Recuperando el objeto TperfilEventoPersona a partir de un codigo de persona
            //y un codigo de un evento
            TperfilEventoPersonaVO tperfilEventoPersonaVO = perfilEventoPersonaDAO.getByPersonaAndEvento(
                                                                                personaDTO.getCodigo(),
                                                                                eventoDTO.getCodigo());

                                                    
            //Recuperando el perfil correspondiente a ese perfileventopersona
            TperfilVO tperfilVO = tperfilEventoPersonaVO.getTperfil();
            
//            System.out.println(
//                    "Perfil del usuario: " + tperfilVO.getCdesperf());
            
            //Recuperando la lista de tareaPerfil del perfilVO
            List<TtarPerfVO> ttarPerfVOs = new LinkedList<TtarPerfVO>(tperfilVO.getTtarPerfs());
            
//            List<TtareaVO> ttareaVOs = new LinkedList<TtareaVO>();
            List<TareaDTO> tareaDTOs = new LinkedList<TareaDTO>();
            for (Iterator<TtarPerfVO> it = ttarPerfVOs.iterator(); it.hasNext();) {
                TtarPerfVO ttarPerfVO = it.next();
                tareaDTOs.add(new TareaDTO(ttarPerfVO.getTtarea()));
//                ttareaVOs.add();
            }
            
            
            
            System.out.println("tama de la lista: " + tareaDTOs.size());
//            for (Iterator<TtareaVO> it = ttareaVOs.iterator(); it.hasNext();) {
//                TtareaVO ttareaVO = it.next();
//                System.out.println(ttareaVO.getCdestar());
//            }
            
            session.setAttribute("tareas", tareaDTOs);
            session.setAttribute("evento", eventoDTO);
            return SUCCESS;
            
        } catch (Exception e) {
            return ERROR;
        }
    }

    public String getEvento() {
        return evento;
    }

    public void setEvento(String evento) {
        this.evento = evento;
    }
    public String getTheme() {
        return theme;
    }

    public void setTheme(String theme) {
        this.theme = theme;
    }

//    public Map<String, String> getThemes() {
//        return themes;
//    }
//
//    public void setThemes(Map<String, String> themes) {
//        this.themes = themes;
//    }
}
